package poker;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Pokers {
    public static final String[] SUITS = {"♥","♦","♠","♣"};

    // 一、获取一副牌
    public static List<Poker> buyPokers() {
        List<Poker> pokerList = new ArrayList<>();
        // 1、i是SUITS的下标，从0到3表示牌的花色
        for (int i = 0; i < 4; i++) {
            // 2、j从1到13表示，1到13的牌
            for (int j = 1; j <= 13; j++) {
                String suit = SUITS[i];
                // 3、得到花色和牌的大小，创建每一张牌
                Poker poker = new Poker(suit,j);

                // 4、把每一张牌放进这一副牌中
                pokerList.add(poker);
            }
        }
        return pokerList;
    }


    // 2、洗牌
    public static void shuffle(List<Poker> pokerList) {
        // 1、生成随机数
        Random random = new Random();

        // 2、从大到小取出牌，再和随机下标的牌交换
        for (int i = pokerList.size()-1; i > 0; i--) { //要求i的范围大于0，否则i=0时，random里面i=0会出错
            // 3、random里的i表示，随机数生成范围是0~i-1，不包括自己i位置，因为和自己交换没意义
            int j = random.nextInt(i);
            // 4、交换函数
            swap(pokerList,i,j);
        }
    }
    private static void swap(List<Poker> pokerList, int i, int j){
        Poker tmp = pokerList.get(i);
        pokerList.set(i,pokerList.get(j));
        pokerList.set(j,tmp);
    }

    public static List<List<Poker>> givePokers(List<Poker> pokerList) {
        //发牌
        // 1、手中的牌定义一个二维集合
        List<List<Poker>> hands = new ArrayList<>();
        List<Poker> hand1 = new ArrayList<>();
        List<Poker> hand2 = new ArrayList<>();
        List<Poker> hand3 = new ArrayList<>();
        List<Poker> hand4 = new ArrayList<>();
        hands.add(hand1);
        hands.add(hand2);
        hands.add(hand3);
        hands.add(hand4);


        for (int i = 1; i <= 12; i++) { // 每个人发到十张牌
            for (int j = 0; j < 4; j++) {  // 有四个人
                // 2、每次发牌从pokerList这副牌中取走第一张
                Poker remove = pokerList.remove(0);

                // 3、将取走的牌一人一张的发，然后一张一张地存入二维集合，发够10次
                hands.get(j).add(remove); //每次j=0，代表发的是第一个人的牌

            }
        }
        return hands;
    }
}
